package com.shangke.corejava.ch6;
/*
 * 1.把客观事物进行分门分类，设计一个class类与之对应
 */
public class Computer {
	// 主机：机箱，主板，CPU，内存条，显卡，硬盘
	// 实例变量，通常也称为属性
	// has -a 关系，组合关系，依赖关系，强依赖关系（计算机依赖于主机）
	// 封装：就是隐藏类内部的实现，并对外提供访问的接口
	// 封装就是把属性私有化，使用private修饰属性，并提供公有的getter和setter方法 或 构造方法 访问私有的属性
	private MainMachine machine;
	private Display display;
	private KeyBoard keyBoard;
	private Mouse mouse;

	// 构造方法：1.方法名与类名相同（大小写相同）；
	// 2.没有返回值类型（不需要写void）;
	// 3.当使用new关键词实例化对象时，需要调用构造方法；
	// 4.构造方法一般用于实例化对象时，申请内存使用，或实例化对象时初始化属性
	// 5.java编译器会默认给java类提供一个空参的构造方法（当没有编写空参构造方法时，会自动提供）
	// 如果显示编写了空参构造方法，则编译器不再提供空参构造方法
	// 6.构造方法也可以进行方法的重载

	public Computer() {
		// 初始化的概念：其实是第一次给变量进行赋值
		machine = new MainMachine();
		keyBoard = new KeyBoard();
		display = new Display();
		mouse = new Mouse();
	}
	
	//无参结构：要输出无参就是全参的时候不选择对象就可以了

	// 全参结构方法
	// 右键-->Source-->Generate Contructor using Fields（自动输出）
	public Computer(MainMachine machine, Display display, KeyBoard keyBoard,
			Mouse mouse) {
		super();
		// 当属性与局部变量名，名称相同时会产生名称冲突
		// 可以使用this关键表示类的属性
		this.machine = machine;
		this.display = display;
		this.keyBoard = keyBoard;
		this.mouse = mouse;
	}

	// 右键-->Source-->Generate Getters and Setters（自动输出）
	public MainMachine getMachine() {
		return machine;
	}

	public void setMachine(MainMachine machine) {
		this.machine = machine;
	}

	public Display getDisplay() {
		return display;
	}

	public void setDisplay(Display display) {
		this.display = display;
	}

	public KeyBoard getKeyBoard() {
		return keyBoard;
	}

	public void setKeyBoard(KeyBoard keyBoard) {
		this.keyBoard = keyBoard;
	}

	public Mouse getMouse() {
		return mouse;
	}

	public void setMouse(Mouse mouse) {
		this.mouse = mouse;
	}

	public void calculate() {
		System.out.println("执行计算");
	}
}
